<template>
  <div class="import-container">
    <!-- {{ $route.query.type }} -->
    <upload-excel :before-upload="beforeUpload" :on-success="handleSuccess" />
  </div>
</template>

<script>
// 1. 文件上传功能组件
// 结构
// --肯定有一个设置了隐藏的文件文件域
// 业务逻辑中
//  1. 点击按钮还是手动拖拽, 都在触发的文件域点击事件,上传后会触发文件域的change事件
//  2. 上传前的校验  文件大小  文件类型 等校验
//  3. 校验通过 返回结果给我们
import { reqImportEmployee } from '@/api/employees'
export default {
  name: 'Import',
  computed: {
    // 计算属性接收路由信息对象中的标志位
    type() {
      return this.$route.query.type
    }
  },
  methods: {
    // 上传前的校验的方法  如果传递了必须return true 才会通过校验
    beforeUpload() {
      // 可以自己加文件大小等的判断
      return true
    },
    // 上传成功的触发的方法 header results
    async handleSuccess({ results, header }) {
      // 批量上传员工的处理
      if (this.type === 'user') {
        // 自己定义的对应规则
        const userRelations = {
          '入职日期': 'timeOfEntry',
          '手机号': 'mobile',
          '姓名': 'username',
          '转正日期': 'correctionTime',
          '工号': 'workNumber'
        }

        // reqImportEmployee(results)
        /*
      // 使用forEach来实现的
      const arr = []
      results.forEach(item => {
        const obj = {}
        for (const k in item) {
          // console.log(k) // 手机号
          const englishKey = userRelations[k]
          obj[englishKey] = item[k]
        }
        arr.push(obj)
      })
      console.log(arr) */
        // 2. 将results里面的对象的key转换成了英文
        const resarr = results.map(item => {
          const obj = {}
          for (const k in item) {
            const englishKey = userRelations[k]
            if (['timeOfEntry', 'correctionTime'].includes(englishKey)) {
            // 转换时间 调用formatExcelDate函数 将 43537 天数日期 转换成 2018-10-20
              obj[englishKey] = this.formatExcelDate(item[k], '-')
            } else {
              obj[englishKey] = item[k]
            }
          }
          return obj
        })
        // console.log(resarr)
        // 3. 发送请求
        const { message } = await reqImportEmployee(resarr)
        // 4. 提示用户
        this.$message.success(message)
        // 5. 返回员工列表
        this.$router.back()
      }
      if (this.type === 'social') {
        // 上传社保处理
      }
      if (this.type === 'salary') {
        // 上传工资的处理
      }
    },
    // 处理excel日期转换的参数1就是要处理的数据,参数2是分割符
    formatExcelDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1) // 毫秒
      time.setYear(time.getFullYear() - 70) // js是从1970/1/1开始的 excel是1900/1/1
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      // 补0操作
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>

<style>

</style>
